package com.zhongge.utils;

import com.bit.utils.FileUtils;
import com.zhongge.book.BorrowInfo;

/**
 * @ClassName AnalyzingBorrowBook
 * @Description TODO 分析借阅图书类：用于将借阅信息文件的存取
 * @Author zhongge
 * @Version 1.0
 */
@SuppressWarnings("all")
public class AnalyzingBorrowBook {
    //从文件中取出书本信息
    /**
     *
     * @param fileName 从指定文件中读取借阅信息
     * @return 返回借阅信息数组
     */
    public static BorrowInfo[] loadBorrowInfo(String fileName) {
        //首先：将文件中内容读到
        String str = FileUtils.readFile(fileName);
        //判断String中内容是否为空
        if (str.isEmpty()) {
            System.out.println("文件内容为空，读取失败！！！");
            return null;
        }
        //如果程序能走到这里，说明读到了数据
        String[] strs = str.split("\n");
        //此时，创建相同大小的Book数组
        BorrowInfo[] borrowInfos = new BorrowInfo[strs.length];
        //将每一个元素封装成对象
        for (int i = 0; i < strs.length; i++) {
            //将字符串变成对象
            String[] strTmp = strs[i].split(",");
            int userId = Integer.parseInt(strTmp[0]);
            int bookId = Integer.parseInt(strTmp[1]);
            BorrowInfo borrowInfo = new BorrowInfo(userId, bookId);
            borrowInfos[i] = borrowInfo;
        }
        //最后将books返回
        return borrowInfos;
    }


    //将图书信息写入文件 store:存储

    /**
     * 将借阅信息表中的数据写到文件中
     * @param borrowInfos 借阅信息表
     * @param fileName 文件路径
     */
    public static void storeBorrowInfo(BorrowInfo[] borrowInfos, String fileName) {
        //首先：看books这个数组是否为空
        if (borrowInfos == null) {
            System.out.println("数组不存在！写入失败");
            return;
        }
        //如果程序走到这里，说明borrowInfos数组存在
        //计算处borrowInfos中的有效数据并将他写入文件
        int borrowCount = 0;//默认为0
        for (int i = 0; i < borrowInfos.length; i++) {
            if (borrowInfos[i] != null) {
                borrowCount++;
            }
        }

        //如果数组中内容为空
        if (borrowCount == 0) {
            System.out.println("数组中内容为空，写入失败!!!");
        }
        //如果程序走到这里说明数组中有数据
        //进行遍历并将数据存于文件
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < borrowCount; i++) {
            //首先将数据得到
            BorrowInfo borrowInfo = borrowInfos[i];
            //将对象序列化为字符串
            String str = borrowInfo.toJson();
            //此时需要将整个books数组中的每一个元素转为字符串后使用\n拼接成整体的字符串
            //最后将整体的字符串写入文件
            if (i == borrowCount - 1) {
                sb.append(str);
            } else {
                sb.append(str).append("\n");
            }
        }
        //写入文件
        FileUtils.writeFile(sb.toString(), fileName);
    }

    /**
     * 测试读入程序
     * @param args
     */
    /*public static void main(String[] args) {
        BorrowInfo[] borrowInfos = loadBorrowInfo(Constant.BORROW_INFO_FILE_NAME);
        System.out.println(Arrays.deepToString(borrowInfos));
    }
*/
    /**
     * 测试写入程序
     * @param args
     */
    /*public static void main1(String[] args) {
        //创建3个借阅信息对象
        BorrowInfo[] borrowInfos = new BorrowInfo[3];
        borrowInfos[0] = new BorrowInfo(1, 3);
        borrowInfos[1] = new BorrowInfo(2, 4);
        borrowInfos[2] = new BorrowInfo(5, 3);
        storeBorrowInfo(borrowInfos, Constant.BORROW_INFO_FILE_NAME);
        System.out.println(borrowInfos);
    }*/
}
